#include<iostream>
#include<set>
#include<map>
#include<vector>
using namespace std;

//int main()
//{
//	/*set<int> s;
//	s.insert(1);
//	s.insert(1);
//	s.insert(4);
//	s.insert(3);
//
//	auto it = s.begin();
//	while (it != s.end())
//	{
//		cout << *it << " ";
//		it++;
//	}
//	cout << endl;
//	for (auto v : s)
//	{
//		cout << v << " ";
//	}*/
//
//	/*map<string, string> m;
//
//	m.insert((pair<string, string>("abc", "123")));
//
//	pair<string, string> p1("122", "222");
//	m.insert(p1);
//	m.insert(make_pair("333", "444"));
//	m.insert({ "23213", "342" });*/
//
//	string s1 = "abhtgd";
//	string s2 = "bfrje";
//	if (s1 > s2)
//		cout << s1;
//	else
//		cout << s2;
//
//	return 0;
//}

//
//int main()
//{
//    vector<string> words;
//    //"i","love","leetcode","i","love","coding"
//    words.push_back("i");
//    words.push_back("love");
//    words.push_back("leetcode");
//    words.push_back("i");
//    words.push_back("love");
//    words.push_back("coding");
//    int k = 2;
//    multiset<string> muls;
//    vector<string> v;
//    set<string> s;
//    muls.insert(words.begin(), words.end());
//    s.insert(words.begin(), words.end());
//    vector<string> vtmp;
//    for (auto v : s)
//    {
//        vtmp.push_back(v);
//    }
//    int a[4] = { 0 };
//    int i = 0;
//    for (auto e : s)
//    {
//        a[i] = muls.count(e);
//        ++i;
//    }
//    while (k--)
//    {
//        int max = a[0];
//        int maxi = 0;
//        for (int j = 0; j < s.size(); j++)
//        {
//            if (a[j] >= max)
//            {
//                if (a[j] == max)
//                {
//                    if (vtmp[j] < vtmp[maxi])
//                    {
//                        max = a[j];
//                        maxi = j;
//                    }
//                }
//                else
//                {
//                    max = a[j];
//                    maxi = j;
//                }
//            }
//        }
//        v.push_back(vtmp[maxi]);
//        a[maxi] = 0;
//    }
//
//
//	return 0;
//}
//



//int main()
//{
//	char name[256];
//	cout << "Please input your name: ";
//	cin.getline(name, 256);
//	cout << "The result is:   " << name << endl;
//
//	return 0;
//
//	return 0;
//}
//#include <iostream>
//#include <string>
//using namespace std;
//
//int main()
//{
//	string name;
//	cout << "Please input your name: ";
//	getline(cin, name);
//	cout << "Welcome to here!" << name << endl;
//
//	return 0;
//
//}
#include <iostream>
#include <string>
#include<algorithm>
using namespace std;
typedef pair<string, int> word;
bool cmp(word w1, word w2)
{
    return w1.second > w2.second;
}
int main()
{
    map<string, int> mp;
    string s;
    while (getline(cin, s))
    {
        for (int i = 0, j = 0; i < s.size(); i++)
        {
            if (s[i] == ' ' || s[i] == '.')
            {
                string t = s.substr(j, i - j);
                if (isupper(t[0]))
                    t[0] = tolower(t[0]);
                j = i + 1;
                mp[t]++;
            }
        }
        vector<word> v(mp.begin(), mp.end());
        sort(v.begin(), v.end(), cmp);
        for (int i = 0; i < v.size(); i++)
            cout << v[i].first << ":" << v[i].second << endl;
    }
    return 0;
}
//int main()
//{
//	map<string, int> m;
//	m.insert((pair<string, int>("abc", 1)), (pair<string, int>("bc", 2)), (pair<string, int>("ac", 1)));
//
//	return 0;
//}

